Computer-Aided Software Engineering (CASE) software or "facilities" assist computer programmers or system developers in the design, development and testing of a computer program.
Traditionally, the steps necessary to implement a computer program were performed manually. Design teams follow a number of discrete steps to create a useful application program from a nascent idea
The analysis begins by manually developing a model in which a problem can be solved by computer. Design teams evaluate the needs of the prospective users and the properties that the computer system should possess to meet those needs.
In the technical design phase of development, developers begin to define how the application program will be built on a given system. They manually determine the procedural and data elements needed and how the data and procedures will be assembled to form the software solution. At this phase the two major tasks are data-modeling and process-modeling.
With the basic design of the program modeled, developers then begin the task of coding the program. Computer programs are generally written in high-level programming language such as BASIC, C, COBOL, FORTRAN or PL/I. The task of reducing the theoretical design of an application to working code is an arduous task that requires many man-hours. Experience in the programming language used to develop the program is necessary.
With the code written, the design team's next problem is to debug the program for syntax errors, and then test the program to determine whether the application performs the desired function. Typically, the debugging and testing phase requires the programmer to evaluate a program at the code level.
The programmer's development tasks become more challenging with the use of multiprocessing systems architecture.
Traditionally, there have been two basic hardware configurations employed in the design of computer systems for multiple users. In one configuration all of a system's processing is performed by one large "mainframe" computer. Each user accesses that system through non-processing terminals.
A network system is the second traditional hardware configuration. A network is comprised of a number of individual processing units that are interconnected to allow the sharing of data and software. There may be additional processors to maintain a group's centralized database and additional processors may be dedicated to the maintenance of the system's operation. The use of a network of processors each dedicated to specific aspects of a computer system is the essence of multiprocessing.
The growth of the use of multiprocessing systems can be traced to the proliferation and development of powerful "micro" or "personal" computers (PC's). Within certain constraints, a PC can perform many of the same processing tasks that mainframe or mini computers do. However, a PC can perform these tasks with substantial savings of instructions executed by the computer, measured in millions of instructions per second, "MIPS". Moreover, unlike a mainframe system, a PC is dedicated to a single user. An efficient multiprocessing system encourages data sharing and the use of dedicated PC's for as many tasks as possible.
In multiprocessor systems, an application may be executed on more than one processor. When various parts of an application program are executed on separate processors, the application is "distributed." Distributed processing can be executed either in a serial sequence or in parallel.
The simultaneous execution of a program on many processors is parallel processing. Sequential execution of a program across different hardware environments is serial or "cooperative" processing.
Multiprocessing capability brings new challenges to computer system designers. Whereas in a mainframe environment all parts of the program were programmed for a single environment, in multiprocessing systems designers can choose the particular environment where specific aspects of a program will run.
Although this freedom to distribute the program results in a highly efficient application, the programmers must now construct programs designed to execute in many hardware environments.
The task of programming multiprocessing systems involves difficult problems of swapping data across different, and incompatible environments. For example, a file containing data stored in a PL/I format is not readable by a program written in a different language such as C or COBOL. A programmer must design special software to handle the communication problems inherent in multiprocessing systems.
In addition, a programmer must code the various distributed programs in the language supported by that environment. For example, if the PC processors support only programs written in C language, those parts of the program must be in C. Whereas the other parts of the program, such as those on the mainframe, may have to be written in another programming language.
Programming in a multiprocessor environment is very complex and time consuming. Staffing requirements for designing an application in a multiprocessor environment alone can make the task cost prohibitive. CASE facilities were created to alleviate some of the burden multiprocessing architecture placed on the programmer.
Traditionally, CASE facilities allow a user to input a high-level logical design of a program which is then translated into code in a particular computer language. However, the CASE facilities currently available do not give the system developer a complete integrated system for the design, implementation and maintenance of a software application. The current facilities do not support the development of a program in a centralized location and where translated code is created and distributed to various environments. The current CASE tools also do not provide a method for re-using parts of a previously developed application that may be usable in an application under development. The current CASE facilities do not provide adequate testing and debugging tools.